home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 14 / CU Amiga Magazine's Super CD-ROM 14 (1997)(EMAP Images)(GB)(Track 1 of 3)[!][issue 1997-09].iso / CUCD / Programming / AMOS / rjkpro_1 / david_2oo.amos / david_2oo.amosSourceCode
Encoding:
AMOS Source Code  |  1997-04-02  |  14.9 KB  |  690 lines

  1. '----------------------------------------------------
  2. '                     david v2.o 
  3. '----------------------------------------------------
  4. '               keller@vip.cybercity.dk
  5. '                     rune keller  
  6. '                 sporuplundsvej 105 
  7. '                   dk-8472 sporup 
  8. '----------------------------------------------------
  9. '            finished o2/o4/1997 13:36:22
  10. '----------------------------------------------------  
  11.  
  12. Screen Open 0,640,256,4,Hires
  13. Palette $AAA,$FFF,$0,$68B,,,,,,,,,,,,,,$FE8,$F40,$0
  14. Limit Mouse 128,42 To 128+319,42+255
  15. Colour Back $AAA
  16. Flash Off 
  17. Curs Off 
  18. Cls 0
  19.  
  20.  
  21.  
  22. _BUTTONS=32
  23.  
  24. Reserve Zone _BUTTONS
  25.  
  26.  
  27.  
  28. Dim _BUT_XPOS(_BUTTONS)
  29. Dim _BUT_YPOS(_BUTTONS)
  30. Dim _BUT_WIDTH(_BUTTONS)
  31. Dim _BUT_HEIGHT(_BUTTONS)
  32. Dim _BUT_TEXT$(_BUTTONS)
  33. Dim _BUT_TYPE(_BUTTONS)
  34.  
  35. Global _BUT_XPOS()
  36. Global _BUT_YPOS()
  37. Global _BUT_WIDTH()
  38. Global _BUT_HEIGHT()
  39. Global _BUT_TEXT$()
  40. Global _BUT_TYPE()
  41.  
  42. Dim _CELL(99)
  43.  
  44. Global _CELL()
  45.  
  46.  
  47.  
  48. _A_BUFFER=0
  49. _P_COUNTER=0
  50. _EDIT=False
  51. _CURRENT_CELL=0
  52. _CELL_OFFSET=0
  53.  
  54.  
  55.  
  56. _BUTTON[-1,0,0,1000,1000,"",0]
  57.  
  58. _BUTTON[-1,50,50,350,100,"A Buffer",2]
  59. _BUTTON[10,75,75,300,50,Str$(_A_BUFFER)-" ",1]
  60.  
  61. _BUTTON[-1,50,200,350,100,"P Counter",2]
  62. _BUTTON[11,75,225,300,50,Str$(_P_COUNTER)-" ",1]
  63.  
  64. _BUTTON[-1,50,350,350,275,"Input",2]
  65. _BUTTON[-1,75,375,300,225,"",1]
  66.  
  67. _BUTTON[-1,50,675,350,275,"Output",2]
  68. _BUTTON[-1,75,700,300,225,"",1]
  69.  
  70. _BUTTON[-1,450,50,500,775,"Cells",2]
  71. _BUTTON[-1,475,75,150,725,"",1]
  72. _BUTTON[-1,625,75,150,725,"",1]
  73. _BUTTON[-1,775,75,150,725,"",1]
  74.  
  75. _BUTTON[20,450,875,100,75,"Run",0]
  76. _BUTTON[21,550,875,100,75,"Edit",0]
  77. _BUTTON[22,650,875,100,75,"Load",0]
  78. _BUTTON[23,750,875,100,75,"Save",0]
  79. _BUTTON[24,850,875,100,75,"Quit",0]
  80.  
  81.  
  82.  
  83. _SHOW_CELL[_CELL_OFFSET,-1,-1]
  84.  
  85.  
  86.  
  87. Do 
  88.    
  89.    
  90.    
  91.    _BEGIN:
  92.    
  93.    _INPUT$=Inkey$
  94.    _SCANCODE=Scancode
  95.    
  96.    If _SCANCODE>0
  97.       Clear Key 
  98.    End If 
  99.    
  100.    
  101.    
  102.    If _EDIT=True
  103.       
  104.       If _SCANCODE=78
  105.          
  106.          _DUMMY=1
  107.          _SHOW_CELL[_CELL_OFFSET,_CURRENT_CELL,_DUMMY]
  108.          
  109.       Else If _SCANCODE=79
  110.          
  111.          _DUMMY=0
  112.          _SHOW_CELL[_CELL_OFFSET,_CURRENT_CELL,_DUMMY]
  113.          
  114.       Else If _SCANCODE=66
  115.          
  116.          Add _DUMMY,1,0 To 1
  117.          _SHOW_CELL[_CELL_OFFSET,_CURRENT_CELL,_DUMMY]
  118.          
  119.       Else If _SCANCODE=68 or _SCANCODE=67 or _SCANCODE=77
  120.          
  121.          If _CURRENT_CELL<99
  122.             
  123.             If _SCANCODE<>77
  124.                _DUMMY=0
  125.             End If 
  126.             
  127.             Inc _CURRENT_CELL
  128.             
  129.             If _CURRENT_CELL-_CELL_OFFSET>15
  130.                Inc _CELL_OFFSET
  131.             End If 
  132.             
  133.             _SHOW_CELL[_CELL_OFFSET,-1,-1]
  134.             _SHOW_CELL[_CELL_OFFSET,_CURRENT_CELL,_DUMMY]
  135.             
  136.          End If 
  137.          
  138.       Else If _SCANCODE=76 or _SCANCODE=65
  139.          
  140.          If _CURRENT_CELL>0
  141.             
  142.             Dec _CURRENT_CELL
  143.             
  144.             If _CURRENT_CELL<_CELL_OFFSET
  145.                Dec _CELL_OFFSET
  146.             End If 
  147.             
  148.             _SHOW_CELL[_CELL_OFFSET,-1,-1]
  149.             _SHOW_CELL[_CELL_OFFSET,_CURRENT_CELL,_DUMMY]
  150.             
  151.          End If 
  152.          
  153.       Else If _SCANCODE=69
  154.          
  155.          _EDIT=False
  156.          _SHOW_CELL[_CELL_OFFSET,-1,-1]
  157.          
  158.       End If 
  159.       
  160.       If _INPUT$=>"0" and _INPUT$<="9"
  161.          
  162.          If _DUMMY=0
  163.             _TEMP=1000*Val(Mid$(Right$("0000"+Str$(_CELL(_CURRENT_CELL))-" ",4),2,1))
  164.             _TEMP=_TEMP+100*Val(_INPUT$)
  165.             _TEMP=_TEMP+10*Val(Mid$(Right$("0000"+Str$(_CELL(_CURRENT_CELL))-" ",4),3,1))
  166.             _TEMP=_TEMP+Val(Mid$(Right$("0000"+Str$(_CELL(_CURRENT_CELL))-" ",4),4,1))
  167.          Else If _DUMMY=1
  168.             _TEMP=1000*Val(Mid$(Right$("0000"+Str$(_CELL(_CURRENT_CELL))-" ",4),1,1))
  169.             _TEMP=_TEMP+100*Val(Mid$(Right$("0000"+Str$(_CELL(_CURRENT_CELL))-" ",4),2,1))
  170.             _TEMP=_TEMP+10*Val(Mid$(Right$("0000"+Str$(_CELL(_CURRENT_CELL))-" ",4),4,1))
  171.             _TEMP=_TEMP+Val(_INPUT$)
  172.          End If 
  173.          
  174.          _CELL(_CURRENT_CELL)=_TEMP
  175.          
  176.          _SHOW_CELL[_CELL_OFFSET,_CURRENT_CELL,_DUMMY]
  177.          
  178.       End If 
  179.       
  180.    End If 
  181.    
  182.    
  183.    
  184.    If _INPUT=True
  185.       
  186.       If _SCANCODE=68 or _SCANCODE=67
  187.          
  188.          _END_INPUT=True
  189.          
  190.          _TEXT$="       "
  191.          
  192.          _XPOS=100+(250/2)
  193.          _YPOS=475
  194.          
  195.          _XPOS=(_XPOS*Screen Width)/1000
  196.          _YPOS=(_YPOS*Screen Height)/1000
  197.          
  198.          Gr Writing 1
  199.          Ink 2,3
  200.          
  201.          Text _XPOS-Text Length(_TEXT$)/2,_YPOS+Text Base,_TEXT$
  202.          
  203.       End If 
  204.       
  205.       If _INPUT$=>"0" and _INPUT$<="9" and Len(_NEW_INPUT$)<4
  206.          
  207.          _NEW_INPUT$=_NEW_INPUT$+_INPUT$
  208.          
  209.          _TEXT$=" "+_NEW_INPUT$+" "
  210.          
  211.          _XPOS=100+(250/2)
  212.          _YPOS=475
  213.          
  214.          _XPOS=(_XPOS*Screen Width)/1000
  215.          _YPOS=(_YPOS*Screen Height)/1000
  216.          
  217.          Gr Writing 1
  218.          Ink 2,3
  219.          
  220.          Text _XPOS-Text Length(_TEXT$)/2,_YPOS+Text Base,_TEXT$
  221.          
  222.       End If 
  223.       
  224.       If Timer mod 20=0
  225.          
  226.          _TEXT$=_NEW_INPUT$
  227.          
  228.          _XPOS=100+(250/2)
  229.          _YPOS=475
  230.          
  231.          _XPOS=(_XPOS*Screen Width)/1000
  232.          _YPOS=(_YPOS*Screen Height)/1000
  233.          
  234.          Gr Writing 1
  235.          Ink ,2
  236.          
  237.          Text _XPOS+Text Length(_TEXT$)/2,_YPOS+Text Base," "
  238.          
  239.       Else If Timer mod 20=10
  240.          
  241.          _TEXT$=_NEW_INPUT$
  242.          
  243.          _XPOS=100+(250/2)
  244.          _YPOS=475
  245.          
  246.          _XPOS=(_XPOS*Screen Width)/1000
  247.          _YPOS=(_YPOS*Screen Height)/1000
  248.          
  249.          Gr Writing 1
  250.          Ink ,3
  251.          
  252.          Text _XPOS+Text Length(_TEXT$)/2,_YPOS+Text Base," "
  253.          
  254.       End If 
  255.       
  256.    End If 
  257.    
  258.    
  259.    
  260.    _CHECK_BUTTONS
  261.    
  262.    
  263.    
  264.    If Param=10
  265.       
  266.    Else If Param=11
  267.       
  268.    Else If Param=20
  269.       
  270.       _EDIT=False
  271.       _RUN=True
  272.       _P_COUNTER=0
  273.       _COMMAND=-1
  274.       
  275.       _SHOW_CELL[_CELL_OFFSET,-1,-1]
  276.       
  277.    Else If Param=21
  278.       
  279.       _RUN=False
  280.       _EDIT=True
  281.       _INPUT=False
  282.       
  283.       _SHOW_CELL[_CELL_OFFSET,_CURRENT_CELL,_DUMMY]
  284.       
  285.    Else If Param=22
  286.       
  287.    Else If Param=23
  288.       
  289.    Else If Param=24
  290.       
  291.       End 
  292.       
  293.    End If 
  294.    
  295.    
  296.    
  297.    Multi Wait 
  298.    
  299.    
  300.    
  301.    If _RUN=True
  302.       
  303.       If _COMMAND=-1
  304.          
  305.          _BUTTON[-1,75,225,300,50,Str$(_P_COUNTER)-" ",1]
  306.          
  307.          _COMMAND=Val(Left$(Right$("0000"+Str$(_CELL(_P_COUNTER))-" ",4),2))
  308.          _VALUE=Val(Right$(Right$("0000"+Str$(_CELL(_P_COUNTER))-" ",4),2))
  309.          
  310.       End If 
  311.       
  312.       If _COMMAND=0
  313.          
  314.       Else If _COMMAND=1
  315.          
  316.          _RUN=False
  317.          
  318.       Else If _COMMAND=2
  319.          
  320.          _A_BUFFER=_CELL(_VALUE)
  321.          _BUTTON[-1,75,75,300,50,Str$(_A_BUFFER)-" ",1]
  322.          
  323.       Else If _COMMAND=3
  324.          
  325.          _CELL(_VALUE)=_A_BUFFER
  326.          
  327.          If _CELL(_VALUE)>9999
  328.             _CELL(_VALUE)=_CELL(_VALUE) mod 9999
  329.          Else If _CELL(_VALUE)<-9999
  330.             _CELL(_VALUE)=-1*(Abs(_CELL(_VALUE)) mod 9999)
  331.          End If 
  332.          
  333.          _SHOW_CELL[_CELL_OFFSET,-1,-1]
  334.          
  335.       Else If _COMMAND=4
  336.          
  337.          _A_BUFFER=_A_BUFFER+_CELL(_VALUE)
  338.          _BUTTON[-1,75,75,300,50,Str$(_A_BUFFER)-" ",1]
  339.          
  340.       Else If _COMMAND=5
  341.          
  342.          _A_BUFFER=_A_BUFFER-_CELL(_VALUE)
  343.          _BUTTON[-1,75,75,300,50,Str$(_A_BUFFER)-" ",1]
  344.          
  345.       Else If _COMMAND=6
  346.          
  347.          _A_BUFFER=_A_BUFFER*_CELL(_VALUE)
  348.          _BUTTON[-1,75,75,300,50,Str$(_A_BUFFER)-" ",1]
  349.          
  350.       Else If _COMMAND=7
  351.          
  352.          If _CELL(_VALUE)=0
  353.             
  354.             _RUN=False
  355.             
  356.             _TEXT$=" Division by zero! "
  357.             
  358.             _XPOS=100+(250/2)
  359.             _YPOS=800
  360.             
  361.             _XPOS=(_XPOS*Screen Width)/1000
  362.             _YPOS=(_YPOS*Screen Height)/1000
  363.             
  364.             Gr Writing 1
  365.             Ink 2,3
  366.             
  367.             Text _XPOS-Text Length(_TEXT$)/2,_YPOS+Text Base,_TEXT$
  368.             
  369.          Else 
  370.             
  371.             _A_BUFFER=_A_BUFFER/_CELL(_VALUE)
  372.             
  373.          End If 
  374.          _BUTTON[-1,75,75,300,50,Str$(_A_BUFFER)-" ",1]
  375.          
  376.       Else If _COMMAND=8
  377.          
  378.          If _INPUT=False
  379.             
  380.             _NEW_INPUT$=""
  381.             _INPUT=True
  382.             _END_INPUT=False
  383.             
  384.             Goto _BEGIN
  385.             
  386.          Else If _INPUT=True and _END_INPUT=True
  387.             
  388.             _INPUT=False
  389.             
  390.             _CELL(_VALUE)=Val(_NEW_INPUT$)
  391.             
  392.             If _CELL(_VALUE)>9999
  393.                _CELL(_VALUE)=_CELL(_VALUE) mod 9999
  394.             Else If _CELL(_VALUE)<-9999
  395.                _CELL(_VALUE)=-1*(Abs(_CELL(_VALUE)) mod 9999)
  396.             End If 
  397.             
  398.             _SHOW_CELL[_CELL_OFFSET,-1,-1]
  399.             
  400.          Else 
  401.             
  402.             Goto _BEGIN
  403.             
  404.          End If 
  405.          
  406.       Else If _COMMAND=9
  407.          
  408.          _TEXT$=Str$(_CELL(_VALUE))-" "
  409.          
  410.          _TEXT$="   "+_TEXT$+"   "
  411.          
  412.          _XPOS=100+(250/2)
  413.          _YPOS=800
  414.          
  415.          _XPOS=(_XPOS*Screen Width)/1000
  416.          _YPOS=(_YPOS*Screen Height)/1000
  417.          
  418.          Gr Writing 1
  419.          Ink 2,3
  420.          
  421.          Text _XPOS-Text Length(_TEXT$)/2,_YPOS+Text Base,_TEXT$
  422.          
  423.       Else If _COMMAND=10
  424.          
  425.          _P_COUNTER=_VALUE-1
  426.          
  427.       Else If _COMMAND=11
  428.          
  429.          If _A_BUFFER=0
  430.             
  431.             _P_COUNTER=_VALUE-1
  432.             
  433.          End If 
  434.          
  435.       Else If _COMMAND=12
  436.          
  437.          If _A_BUFFER<0
  438.             
  439.             _P_COUNTER=_VALUE-1
  440.             
  441.          End If 
  442.          
  443.       End If 
  444.       
  445.       Inc _P_COUNTER
  446.       
  447.       If _P_COUNTER=100
  448.          _RUN=False
  449.       End If 
  450.       
  451.       _COMMAND=-1
  452.       
  453.    End If 
  454.    
  455.    
  456.    
  457. Loop 
  458.  
  459.  
  460.  
  461. Procedure _SHOW_CELL[_CELL_OFFSET,_CURRENT_CELL,_DUMMY]
  462.    
  463.  
  464.  
  465.    If _CURRENT_CELL=-1
  466.       
  467.       _START=0
  468.       _END=15
  469.       
  470.    Else 
  471.       
  472.       _START=_CURRENT_CELL-_CELL_OFFSET
  473.       _END=_START
  474.       
  475.    End If 
  476.    
  477.    For _CELL=_START To _END
  478.       
  479.       _TEXT$=" "+Right$("00"+Str$(_CELL_OFFSET+_CELL)-" ",2)+" "
  480.       
  481.       _XPOS=550-Text Length(_TEXT$)/2
  482.       _YPOS=75+(725/2)-(8*40)+_CELL*40
  483.       
  484.       _XPOS=(_XPOS*Screen Width)/1000
  485.       _YPOS=(_YPOS*Screen Height)/1000
  486.       
  487.       Gr Writing 1
  488.       
  489.       If _START=_END
  490.          Ink 2,1
  491.       Else 
  492.          Ink 2,3
  493.       End If 
  494.       
  495.       Text _XPOS,_YPOS+Text Base,_TEXT$
  496.       
  497.       
  498.       
  499.       _TEXT$=" "+Left$(Right$("0000"+Str$(_CELL(_CELL_OFFSET+_CELL))-" ",4),2)+" "
  500.       
  501.       _XPOS=700-Text Length(_TEXT$)/2
  502.       _YPOS=75+(725/2)-(8*40)+_CELL*40
  503.       
  504.       _XPOS=(_XPOS*Screen Width)/1000
  505.       _YPOS=(_YPOS*Screen Height)/1000
  506.       
  507.       If _START=_END and _DUMMY=0
  508.          Ink 2,1
  509.       Else 
  510.          Ink 2,3
  511.       End If 
  512.       
  513.       Text _XPOS,_YPOS+Text Base,_TEXT$
  514.       
  515.       
  516.       
  517.       _TEXT$=" "+Right$(Right$("0000"+Str$(_CELL(_CELL_OFFSET+_CELL))-" ",4),2)+" "
  518.       
  519.       _XPOS=850-Text Length(_TEXT$)/2
  520.       _YPOS=75+(725/2)-(8*40)+_CELL*40
  521.       
  522.       _XPOS=(_XPOS*Screen Width)/1000
  523.       _YPOS=(_YPOS*Screen Height)/1000
  524.       
  525.       If _START=_END and _DUMMY=1
  526.          Ink 2,1
  527.       Else 
  528.          Ink 2,3
  529.       End If 
  530.       Text _XPOS,_YPOS+Text Base,_TEXT$
  531.       
  532.    Next 
  533.    
  534.    
  535.    
  536. End Proc
  537.  
  538.  
  539.  
  540. Procedure _BUTTON[_ZONE,_XPOS,_YPOS,_WIDTH,_HEIGHT,_TEXT$,_TYPE]
  541.    
  542.    
  543.    
  544.    If _ZONE>-1
  545.       
  546.       _BUT_XPOS(_ZONE)=_XPOS
  547.       _BUT_YPOS(_ZONE)=_YPOS
  548.       _BUT_WIDTH(_ZONE)=_WIDTH
  549.       _BUT_HEIGHT(_ZONE)=_HEIGHT
  550.       _BUT_TEXT$(_ZONE)=_TEXT$
  551.       _BUT_TYPE(_ZONE)=_TYPE
  552.       
  553.    End If 
  554.    
  555.    
  556.    
  557.    _XPOS=(_XPOS*Screen Width)/1000
  558.    _YPOS=(_YPOS*Screen Height)/1000
  559.    _WIDTH=(_WIDTH*Screen Width)/1000
  560.    _HEIGHT=(_HEIGHT*Screen Height)/1000
  561.    
  562.    
  563.    
  564.    If _ZONE>-1
  565.       
  566.       Set Zone _ZONE,_XPOS,_YPOS To _XPOS+_WIDTH,_YPOS+_HEIGHT
  567.       
  568.    End If 
  569.    
  570.    
  571.    
  572.    If _TYPE=0
  573.       
  574.       Ink 1
  575.       Draw _XPOS,_YPOS To _XPOS+_WIDTH-2,_YPOS
  576.       Draw _XPOS,_YPOS+1 To _XPOS,_YPOS+_HEIGHT-1
  577.       Draw _XPOS+1,_YPOS+1 To _XPOS+1,_YPOS+_HEIGHT-2
  578.       
  579.       Ink 2
  580.       Draw _XPOS+1,_YPOS+_HEIGHT-1 To _XPOS+_WIDTH-1,_YPOS+_HEIGHT-1
  581.       Draw _XPOS+_WIDTH-2,_YPOS+1 To _XPOS+_WIDTH-2,_YPOS+_HEIGHT-2
  582.       Draw _XPOS+_WIDTH-1,_YPOS To _XPOS+_WIDTH-1,_YPOS+_HEIGHT-2
  583.       
  584.       Ink 0
  585.       Bar _XPOS+2,_YPOS+1 To _XPOS+_WIDTH-3,_YPOS+_HEIGHT-2
  586.       
  587.       Gr Writing 0
  588.       Ink 2,0
  589.       
  590.       Text _XPOS+_WIDTH/2-Text Length(_TEXT$)/2,_YPOS+_HEIGHT/2+Text Base-4,_TEXT$
  591.       
  592.    Else If _TYPE=1
  593.       
  594.       Ink 2
  595.       Draw _XPOS,_YPOS To _XPOS+_WIDTH-2,_YPOS
  596.       Draw _XPOS,_YPOS+1 To _XPOS,_YPOS+_HEIGHT-1
  597.       Draw _XPOS+1,_YPOS+1 To _XPOS+1,_YPOS+_HEIGHT-2
  598.       
  599.       Ink 1
  600.       Draw _XPOS+1,_YPOS+_HEIGHT-1 To _XPOS+_WIDTH-1,_YPOS+_HEIGHT-1
  601.       Draw _XPOS+_WIDTH-2,_YPOS+1 To _XPOS+_WIDTH-2,_YPOS+_HEIGHT-2
  602.       Draw _XPOS+_WIDTH-1,_YPOS To _XPOS+_WIDTH-1,_YPOS+_HEIGHT-2
  603.       
  604.       Ink 3
  605.       Bar _XPOS+2,_YPOS+1 To _XPOS+_WIDTH-3,_YPOS+_HEIGHT-2
  606.       
  607.       Gr Writing 0
  608.       Ink 2,0
  609.       
  610.       Text 1+_XPOS+_WIDTH/2-Text Length(_TEXT$)/2,1+_YPOS+_HEIGHT/2+Text Base-4,_TEXT$
  611.       
  612.    Else If _TYPE=2
  613.       
  614.       Ink 1
  615.       Draw _XPOS,_YPOS To _XPOS+_WIDTH-2,_YPOS
  616.       Draw _XPOS,_YPOS+1 To _XPOS,_YPOS+_HEIGHT-1
  617.       Draw _XPOS+1,_YPOS+1 To _XPOS+1,_YPOS+_HEIGHT-2
  618.       
  619.       Ink 2
  620.       Draw _XPOS+1,_YPOS+_HEIGHT-1 To _XPOS+_WIDTH-1,_YPOS+_HEIGHT-1
  621.       Draw _XPOS+_WIDTH-2,_YPOS+1 To _XPOS+_WIDTH-2,_YPOS+_HEIGHT-2
  622.       Draw _XPOS+_WIDTH-1,_YPOS To _XPOS+_WIDTH-1,_YPOS+_HEIGHT-2
  623.       
  624.       Ink 0
  625.       Bar _XPOS+2,_YPOS+1 To _XPOS+_WIDTH-3,_YPOS+_HEIGHT-2
  626.       
  627.       Gr Writing 1
  628.       Ink 2,0
  629.       
  630.       _TEXT$=" "+_TEXT$+" "
  631.       Text _XPOS+_WIDTH/2-Text Length(_TEXT$)/2,_YPOS+Text Base-4,_TEXT$
  632.       
  633.    End If 
  634.    
  635.  
  636.  
  637. End Proc
  638.  
  639. Procedure _CHECK_BUTTONS
  640.    
  641.  
  642.  
  643.    _MOUSE_KEY=Mouse Key
  644.    _MOUSE_ZONE=Mouse Zone
  645.    
  646.    If _MOUSE_KEY>0 and _MOUSE_ZONE>0
  647.       
  648.       _BUTTON=_MOUSE_ZONE
  649.       _ACTIVE=True
  650.       _TYPE=_BUT_TYPE(_BUTTON)
  651.       
  652.       If _TYPE mod 2=0
  653.          _NEW_TYPE=_TYPE+1
  654.       Else 
  655.          _NEW_TYPE=_TYPE-1
  656.       End If 
  657.       
  658.       _BUTTON[-1,_BUT_XPOS(_BUTTON),_BUT_YPOS(_BUTTON),_BUT_WIDTH(_BUTTON),_BUT_HEIGHT(_BUTTON),_BUT_TEXT$(_BUTTON),_NEW_TYPE]
  659.       
  660.       Repeat 
  661.          
  662.          If _ACTIVE=True and Mouse Zone<>_MOUSE_ZONE
  663.             
  664.             _BUTTON[-1,_BUT_XPOS(_BUTTON),_BUT_YPOS(_BUTTON),_BUT_WIDTH(_BUTTON),_BUT_HEIGHT(_BUTTON),_BUT_TEXT$(_BUTTON),_TYPE]
  665.             _ACTIVE=False
  666.             
  667.          Else If _ACTIVE=False and Mouse Zone=_MOUSE_ZONE
  668.             
  669.             _BUTTON[-1,_BUT_XPOS(_BUTTON),_BUT_YPOS(_BUTTON),_BUT_WIDTH(_BUTTON),_BUT_HEIGHT(_BUTTON),_BUT_TEXT$(_BUTTON),_NEW_TYPE]
  670.             _ACTIVE=True
  671.             
  672.          End If 
  673.          
  674.       Until Mouse Key=0
  675.       
  676.       If _ACTIVE=True
  677.          
  678.          _BUTTON[-1,_BUT_XPOS(_BUTTON),_BUT_YPOS(_BUTTON),_BUT_WIDTH(_BUTTON),_BUT_HEIGHT(_BUTTON),_BUT_TEXT$(_BUTTON),_TYPE]
  679.          
  680.       End If 
  681.       
  682.       If _MOUSE_KEY=1
  683.          Pop Proc[_BUTTON]
  684.       End If 
  685.       
  686.    End If 
  687.  
  688.  
  689.    
  690. End Proc[-1]